export class MyTools {
  /**
   * 空校验 null或""都返回true
   */
  public static isEmpty (obj: any):boolean {
    if ((typeof obj === 'string')) {
      return !obj || obj.replace(/\s+/g, '') === '';
    } else {
      return (!obj || JSON.stringify(obj) === '{}' || obj.length === 0);
    }
  }

  /**
   * 非空校验
   */
  public static isNotEmpty (obj: any): boolean {
    return !this.isEmpty(obj);
  }

  /**
   * 对象复制
   * @param obj
   */
  public static copy (obj :any): any {
    if (this.isNotEmpty(obj)) {
      return JSON.parse(JSON.stringify(obj));
    } else {
      return obj;
    }
  }

  /**
   * 使用递归将数组转为树形结构
   * 父ID属性为parent
   */
  public static array2Tree (array: any, parentId: number): any {
    if (this.isEmpty(array)) {
      return [];
    }

    const result = [];
    for (let i = 0; i < array.length; i++) {
      const c = array[i];
      // console.log(Number(c.parent), Number(parentId));
      if (Number(c.parent) === Number(parentId)) {
        result.push(c);

        // 递归查看当前节点对应的子节点
        const children = MyTools.array2Tree(array, c.id);
        if (MyTools.isNotEmpty(children)) {
          c.children = children;
        }
      }
    }
    return result;
  }

  /**
   * 随机生成[len]长度的[radix]进制数
   * @param len
   * @param radix 默认62
   * @returns {string}
   */
  public static uuid (len: number, radix = 62): string {
    const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
    const uuid = [];
    radix = radix || chars.length;

    for (let i = 0; i < len; i++) {
      uuid[i] = chars[0 | Math.random() * radix];
    }

    return uuid.join('');
  }

  // ======== 2021.07.25 ppgg 增加的方法 ==========
  /**
   * @param data：原始数据
   * @param rootKeys：如果需要将顶层数据放入一个数组，这个参数不能为空
   * @param rootId：我的这个方法应该不需要 rootId这个参数
   * @returns {[]}：返回结果，包括属性数据treeData；map数据mapData；和第一层节点的id的结合 rootKeys
   */
  // static listToTree (data, menuRootKeys, rootId) {
  public static list2tree (data: any): any {
    // 建立整棵树的索引
    // const map = {};
    // 创建存放树的数组
    const result: any = {
      idMapData: {},
      treeData: [],
      rootKeys: []
    };

    data.forEach((item: any) => {
      // if (item.menuParentId != null) {
      result.idMapData[item.id] = item;
      // }
    });

    // 循环遍历生成树
    data.forEach((item: any) => {
      // 根据Pid检索对象是否存在
      const parent = result.idMapData[item.menuParentId];
      // 如果存在就加入到父节点中
      if (parent) {
        // 是否存在孩子数组  有就添加没有就创建
        if (parent.children === undefined) {
          parent.children = [];
        }
        parent.children.push(item);
      } else {
        // 如果不存在，那么这就是根节点，直接加入到数组中
        result.treeData.push(item);
        // 初始化menu的根节点
        result.rootKeys.push(item.id);
      }
    });
    // 打印效果
    console.log('myTools.js >>> list2tree() tree =', result.treeData);
    console.log('myTools.js >>> list2tree() rootKeys =', result.rootKeys);
    return result;
  }
}
